package Class;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-05-09
 * Time: 12:56
 */
public class Test0509 {
    public static void main12(String[] args) {
        int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        //遍历数组：
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");//1 2 3 4 5 6 7 8 9 10
        }
        System.out.println();
        System.out.println("====================");
        //也可以用：for each循环
        for(int x : array){//遍历array这个数组，取出每个元素，放在x中，
            System.out.print(x + " ");
        }
        System.out.println();
        System.out.println("=======Arrays=======");
        //使用操作数组的工具类 Arrays ->把数组里面的内容变成字符串打印出来
        String ret = Arrays.toString(array);
        System.out.println(ret);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }
    public static void main(String[] args) {
        //array 叫引用变量 简称：引用
        //数组命名：数组对象
        int[] array1 = { 1, 2, 3, 4, 5 };//三种命名方法都是正确的
        int[] array2 = new int[]{ 1, 2, 3, 4, 5 };//array1 与 array2 没有区别
        int[] array3 = new int[10];//默认里面的值 为 0
        //也可以这样：
        int[] array4;
        array4 = new int[10];
        //但是不可以这样：
        /*int array5;//对数组整体初始化，只能在定义这个数组的时候，否则会报错
        array5 = { 1, 2, 3, 4, 5 };//error*/
        //其它类型的也有：
        boolean[] flag = new boolean[3];
    }
    public static int Fin1(int n) {
        int f1 = 1;
        int f2 = 1;
        int f3 = 0;
        for (int i = 3; i <= n ; i++) {
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
    }
    public static int Fin(int n) {//Fin(n) = Fin(n-1) + Fin(n-2)
        //结束条件：
        if(n == 1 || n == 2){
            return 1;
        }else{
            return Fin(n - 1) + Fin(n - 2);
        }//1 1 2 3 5 8 13 21 34 55
    }
    public static int sumFunc(int n) {//123 -> 1+2+3 == 6
        //结束条件：
        if(n < 10){
            return n;
        }else{
            return n % 10 + sumFunc(n / 10);
        }
    }
    public static int sum(int n) {//n == 10
        //结束条件：
        if(n == 1){
            return 1;
        }else{//递归公式：
            return n + sum(n - 1);
        }
    }
    public static void print(int n) {//1234 -> 1 2 3 4
        //结束条件：
        if(n < 10) {
            System.out.print(n+" ");
            return;
        }else {
            //递归条件：
            print(n / 10);
            System.out.print((n % 10)+" ");
        }
    }
    public static int func(int n) {
        //结束条件：
        if(n == 1){
            return 1;
        }else{
            //递推公式：
            return n * func(n-1);
        }
    }
    public static void main10(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //解决递归问题
        //1.有一个递推公式
        //2.找到当前问题的递归条件 “结束条件”(等同于起始条件)

        /*//题目1：求n!
        int num = scanner.nextInt();
        int ret = func(num);
        System.out.println(ret);*/

        /*//2.按照顺序打印输入：1234 打印：1 2 3 4
        int num1 = scanner.nextInt();
        print(num1);*/

       /* //3.使用递归计算1 + 2 + 3 + 4 +……+ 10
        int num = scanner.nextInt();
        int ret = sum(num);
        System.out.println(ret);*/

        /*//4.用递归计算一个数的每一位个位数的和 输入：123 输出：1+2+3 == 6
        int num = scanner.nextInt();
        int ret = sumFunc(num);
        System.out.println(ret);*/

        //5.用递归计算斐波那契额数列Fin(n) = Fin(n-1) + Fin(n-2)
        int num = scanner.nextInt();
        //int ret = Fin(num);
        int ret1 = Fin1(num);
        System.out.println(ret1);
    }
    public static int add(int x, int y) {
        return x + y;
    }
    public static int add(int a, int b, int c) {
        return a + b + c;
    }
    public static double add(double x, double y){
        return x + y;
    }
    public static float add(float x, float y) {
        return x + y;
    }
    public static void main9(String[] args) {
        //写一个方法实现两个数相加
        //方法重载：
        //1.方法名相同
        //2.参数列表不一样(个数、类型、顺序)
        //3.与返回值无关

        int x = 10;
        int y = 20;
        int ret = add(x, y);
        System.out.println(ret);

        int a = 10;
        int b = 20;
        int c = 30;
        int ret1 = add(a, b, c);
        System.out.println(ret1);

        double d = 1.3;
        double e = 2.7;
        double ret3 = add(d, e);
        System.out.println(ret3);
    }
    public static void main8(String[] args) {
        //写一个方法，判断是否为闰年
        Scanner scanner = new Scanner(System.in);
        //输入：
        System.out.println("输入：");
        int year = scanner.nextInt();
        boolean ret = isLeapyear(year);
        if(ret == true){
            System.out.println("是闰年");
        }else{
            System.out.println("不是闰年");
        }
    }
    public static boolean isLeapyear(int year){
        System.out.println("该方法被调用了");
        if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)){
            return true;
        }else{
            return false;
        }
    }
    public static void main7(String[] args) {
        //猜数字游戏
        Random random = new Random();//生成随机数
        int randNum = random.nextInt(100);//[0, 100)
        System.out.println(randNum);
        //输入：
        Scanner scanner = new Scanner(System.in);
        while(true){
            System.out.println("请输入你要猜的数字：");
            int num = scanner.nextInt();
            //比较
            if(num > randNum){
                System.out.println("猜大了");
            }else if(num < randNum){
                System.out.println("猜小了");
            }else{
                System.out.println("猜对了");
                break;
            }
        }
    }
    public static void main6(String[] args) {
        //输入：
        Scanner scanner = new Scanner(System.in);

        System.out.println("输入一个整数: ");
        //int age = scanner.nextInt();
        int age = scanner.nextInt();//不同类型的输入
        System.out.println(age);

        scanner.nextLine();

        System.out.println("读入一个字符串: ");
        String str = scanner.nextLine();
        System.out.println(str);

        System.out.println("读入一个小数: ");
        float f = scanner.nextFloat();
        System.out.println(f);


    }
    public static void main5(String[] args) {
        int n = 7;
        int count = 0;
        while(n != 0){
            n = n ^ (n - 1);
            count++;
        }
        System.out.println("二进制的补码中1的个数 "+count);
    }
    public static void main4(String[] args) {
        //1/1 - 1/2 + 1/3 - 1/4 ……
        double sum = 0.0;
        int flag = 1;
        for (int i = 1; i <= 100 ; i++) {
            sum +=( 1.0 / i ) * flag;
            flag = -flag;
        }
        System.out.println("sum = " + sum);//sum = 0.688172179310195
    }
    public static void main3(String[] args) {
        //打印X型
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while(in.hasNextInt()){
            int n = in.nextInt();
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if(i == j || i + j == n - 1){
                        System.out.print("*");
                    }else{
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
        }
    }
    public static void main2(String[] args) {
        //判断一个数是否为素数
        int num = 7;
        int i = 2;
        /*for (; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                break;
            }
        }
        if(i > Math.sqrt(num)){
            System.out.println(num + " 是素数");
        }*/
        boolean is = isPrime(num);
        if(is){
            System.out.println(num + " 是素数");
        }else{
            System.out.println(num + " 不是素数");
        }
    }

    public static boolean isPrime(int num){
        //负数 0 1都不是素数
        if(num <= 1){
            return false;
        }
        //从2 ~ sqrt(num)来排除
        for (int i = 2; i <=  Math.sqrt(num); i++) {
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }

    public static void main1(String[] args) {
        //9 19 29 39 49 59 69 79 89 99
        //  91 92 93 94 95 96 97 98 99
        int num = 9;
        int count = 0;
        while(num < 100){
            if(num % 10 == 9){
                count++;
            }
            if(num / 10 == 9){
                count++;
            }
            num++;
        }
        System.out.println(count);
    }
}
